//
// Created by macos on 2021/12/11.
//

#ifndef MCOMMON_HTTP_H
#define MCOMMON_HTTP_H

#include "mhttp.h"
#include <ghttp.h>

/**
 * 基于libghttp的http get请求方法
 * @param url   URL地址
 * @param headers   特殊请求头，list<k,v>类型,用kv_put放入其中
 * @param params    请求参数，将自动组合到url中作为query部分，list<k,v>类型
 * @param response  返回请求结果对象指针，包含response与size两部分
 * @return  http_status 返回HTTP请求的状态码
 */
uint16_t ghttp_get(const char *url, mlist_t headers, mlist_t params, struct http_response *response);

/**
 * 基于libghttp的http post form请求方法
 * @param url   URL地址
 * @param headers   特殊请求头，list<k,v>类型,用kv_put放入其中
 * @param params    请求参数，将自动组合到url中作为query部分，list<k,v>类型
 * @param response  返回请求结果对象指针，包含response与size两部分
 * @return  http_status 返回HTTP请求的状态码
 */
uint16_t ghttp_post(const char *url, mlist_t headers, mlist_t params, struct http_response *response);

/**
 * 基于libghttp的http post json请求方法
 * @param url   URL地址
 * @param headers   特殊请求头，list<k,v>类型,用kv_put放入其中
 * @param json    请求参数json对象，json_doc对象指针类型
 * @param response  返回请求结果对象指针，包含response与size两部分
 * @return  http_status 返回HTTP请求的状态码
 */
uint16_t ghttp_post_json(const char *url, mlist_t headers, json_doc *json, struct http_response *response);

/**
 * 基于libghttp的http post xml请求方法
 * @param url   URL地址
 * @param headers   特殊请求头，list<k,v>类型,用kv_put放入其中
 * @param xml    请求参数，xml字符串
 * @param response  返回请求结果对象指针，包含response与size两部分
 * @return  http_status 返回HTTP请求的状态码
 */
uint16_t ghttp_post_xml(const char *url, mlist_t headers, const char *xml, struct http_response *response);

#endif //MCOMMON_HTTP_H
